package com.ken.app.sort;

/**
 * Author: Liuk
 * Mail: leo_work@aliyun.com
 * Date: 2017/8/26 0026
 * Desc: 冒泡排序
 */
public class BubbleSort {

    /**
     * 冒泡排序
     *
     * @param arr
     */
    public static void bubbleSort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        int count = arr.length; // 参与排序的总个数
        // 外层循环控制数组的轮次数
        for (int i = 0; i < count; i++) {
            /*
             * comparedCount表示本轮需要参与比较的个数
             * 5个人进行第1轮比较只需要比较4次，所以第1轮参与比较的个数为count-1
             * 此外，每过一轮，都会确定一个人的位置，因此第i轮参与比较的个数为count-1-i
             */
            int comparedCount = count - 1 - i;
            //内层循环进行本轮大小的比较，并按照规则顺序交换位置
            for (int j = 0; j < comparedCount; j++) {
                int nextIndex = j + 1;
                if (arr[j] > arr[nextIndex]) {
                    // 如果相邻两数左边的比右边的大，则交换位置
                    int temp = arr[nextIndex];
                    arr[nextIndex] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }
    public static void main(String[] args) {
        // =====使用冒泡排序对表示数组进行从低到高的排序=====
        // A(181)、B(169)、C(187)、D(172)、E(163)
        int[] arr = {181, 169, 187, 172, 163};
        bubbleSort(arr);
        // =====冒泡排序完成=====
        // 输出排序结果：
        for (int height : arr) {
            System.out.println(height);
        }
        System.out.println("-------------------------------");
        System.out.println( 5<<5); //5*32
        System.out.println(6>>1);

    }
}
